package com.lagou.task;

import java.util.Arrays;
import java.util.Scanner;


/* homework 02
编程实现控制台版并支持两人对战的五子棋游戏。
（1）绘制棋盘 - 写一个成员方法实现
（2）提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。
（3）每当一方下棋后判断是否获胜 - 写一个成员方法实现。
（4）提示： 采用二维数组来模拟并描述棋盘
 */

public class ChessGame {

    //采用单例设计模式初始化棋盘，使其有且只有一个
    private int[][] chessboard = new int[16][16];
    private static ChessGame cg = new ChessGame();

    private ChessGame() {
        // 先绘制棋盘中第一行的坐标信息
        for (int i = 0; i < 17; i++) {

            if (0 == i) {

                System.out.print("  ");
            } else {
                // 按照十六进制的格式打印i-1的数值
                System.out.printf("%x ", i - 1);
            }
        }
        System.out.println();

        // 绘制棋盘中除了第一行之外的其他部分以及行坐标信息
        for (int i = 0; i < 16; i++) {

            System.out.printf("%x ", i);
            for (int j = 0; j < 16; j++) {

                if (0 == chessboard[i][j]) {

                    System.out.print(" + ");//待落子标识

                } else if (1 == chessboard[i][j]) {

                    System.out.print(" ● ");//黑方棋子标识

                } else {

                    System.out.print(" ○ ");//白方棋子标识

                }
            }
            System.out.println();
        }
    }

    //绘制棋盘的成员方法,采用单例模式从类层级获取棋盘
    public static ChessGame getCg() {
        return cg;
    }


// 自定义成员方法来提示黑方和白方分别下棋
// 定义标志位来进行黑方和白方的切换，true代表黑方，false代表白方

    public void drawChessboard(boolean flag) {

        Scanner sc = new Scanner(System.in);

        int ix = sc.nextInt();

        int iy = sc.nextInt();
        // 根据用户输入的坐标来调整棋盘中的图案，策略为改变数组的元素值
        // 当黑方落子时就将数组中对应元素值改为1，当白方落子时就将数组中对应元素改为2

        chessboard[ix][iy] = (flag ? 1 : 2);
        if (true == flag) {


            System.out.println("--------------------轮到黑方下棋--------------------");
        } else {


            System.out.println("--------------------轮到白方下棋--------------------");
        }
        //重新绘制棋盘
        getCg();

    }



}








